{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"F000H460_HW4_code.ipynb","provenance":[],"mount_file_id":"1s38dl-GMhpR9jKMsxMBgvvCGAdMWFYpg","authorship_tag":"ABX9TyPdqh4ypFai15p0pNvAEIp1"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"code","metadata":{"id":"eDEwAuGOniDZ","executionInfo":{"status":"ok","timestamp":1622680901380,"user_tz":-480,"elapsed":457,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}}},"source":["import pandas as pd\n","from nltk.corpus import stopwords\n","import nltk\n","import re\n","from collections import Counter\n","import matplotlib.pyplot as plt\n","from keras.preprocessing.text import Tokenizer\n","from tensorflow.keras.preprocessing.sequence import pad_sequences\n","from keras.callbacks import ModelCheckpoint, EarlyStopping, CSVLogger, ReduceLROnPlateau\n","import tensorflow as tf\n","from sklearn.utils import shuffle\n","import os\n","import time\n","from keras.models import load_model\n","import numpy as np"],"execution_count":65,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"6qQWEmBqrAuH","executionInfo":{"status":"ok","timestamp":1622680901380,"user_tz":-480,"elapsed":5,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}},"outputId":"4f6489ec-a5f2-4fb5-b9a9-4c1b8535f753"},"source":["nltk.download('stopwords')"],"execution_count":66,"outputs":[{"output_type":"stream","text":["[nltk_data] Downloading package stopwords to /root/nltk_data...\n","[nltk_data]   Package stopwords is already up-to-date!\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["True"]},"metadata":{"tags":[]},"execution_count":66}]},{"cell_type":"code","metadata":{"id":"k05fx1YBoV_o","executionInfo":{"status":"ok","timestamp":1622680901381,"user_tz":-480,"elapsed":5,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}}},"source":["train_df = pd.read_csv('train_yelp_reviews.csv',sep='\\t')\n","test_df = pd.read_csv('test_yelp_reviews.csv',sep='\\t')"],"execution_count":67,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":204},"id":"2uvvxim9qfMZ","executionInfo":{"status":"ok","timestamp":1622680901381,"user_tz":-480,"elapsed":5,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}},"outputId":"6567cf86-2b99-4c37-f17d-5b9c6edf86cd"},"source":["train_df.head()"],"execution_count":68,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>text</th>\n","      <th>label</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>Great time - family dinner on a Sunday night.</td>\n","      <td>1</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>The classic Maine Lobster Roll was fantastic.</td>\n","      <td>1</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>We won't be going back.</td>\n","      <td>0</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>All I have to say is the food was amazing!!!</td>\n","      <td>1</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>Food was good, service was good, Prices were g...</td>\n","      <td>1</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["                                                text  label\n","0      Great time - family dinner on a Sunday night.      1\n","1      The classic Maine Lobster Roll was fantastic.      1\n","2                            We won't be going back.      0\n","3       All I have to say is the food was amazing!!!      1\n","4  Food was good, service was good, Prices were g...      1"]},"metadata":{"tags":[]},"execution_count":68}]},{"cell_type":"markdown","metadata":{"id":"EPkiOAa4R-ur"},"source":["## Randomly shuffle train data"]},{"cell_type":"code","metadata":{"id":"Uac9bDvt-C9n","executionInfo":{"status":"ok","timestamp":1622680901381,"user_tz":-480,"elapsed":4,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}}},"source":["train_df = shuffle(train_df)"],"execution_count":69,"outputs":[]},{"cell_type":"code","metadata":{"id":"hhzGRSZLpDka","executionInfo":{"status":"ok","timestamp":1622680901865,"user_tz":-480,"elapsed":488,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}}},"source":["def raw_to_words(sentence):\n","    # Remove non-letters\n","    no_letter = re.sub(\"[^a-zA-Z]\", \" \", sentence)\n","\n","    # Convert words to lower case and split them, remove stopwords\n","    lower_words = no_letter.lower().split()\n","    words_stop = set(stopwords.words('english'))\n","    cleaning_words = [i for i in lower_words if not i in words_stop]\n","    cleaning_sentence = ' '.join(cleaning_words)\n","    return cleaning_sentence"],"execution_count":70,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"R0KF31rZ0l0z"},"source":["## Most commonly occurring tokens for class 1"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"xvsOX01Xw8y8","executionInfo":{"status":"ok","timestamp":1622680901865,"user_tz":-480,"elapsed":8,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}},"outputId":"79ce10c8-58d5-4722-f20f-ef7df7f4661e"},"source":["df_class_1 = train_df[train_df['label']==1]\n","df_class_1 = df_class_1['text'].apply(raw_to_words)\n","c_1 = Counter(' '.join([i for i in df_class_1.values]).split())\n","token_lg1_50 = [i for i in c_1.items() if i[1]>50]\n","token_lg1_50"],"execution_count":71,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[('great', 64), ('place', 51), ('food', 53), ('good', 66)]"]},"metadata":{"tags":[]},"execution_count":71}]},{"cell_type":"markdown","metadata":{"id":"XzV79ONc010X"},"source":["## Most commonly occurring tokens for class 0"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"i-K3I2vhz-XP","executionInfo":{"status":"ok","timestamp":1622680901866,"user_tz":-480,"elapsed":8,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}},"outputId":"91d44594-d8de-4483-e16e-9309f5c233a1"},"source":["df_class_0 = train_df[train_df['label']==0]\n","df_class_0 = df_class_0['text'].apply(raw_to_words)\n","c_0 = Counter(' '.join([i for i in df_class_0.values]).split())\n","token_lg0_50 = [i for i in c_0.items() if i[1]>50]\n","token_lg0_50"],"execution_count":72,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[('food', 61)]"]},"metadata":{"tags":[]},"execution_count":72}]},{"cell_type":"code","metadata":{"id":"SAtAVEviqv3A","executionInfo":{"status":"ok","timestamp":1622680901866,"user_tz":-480,"elapsed":7,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}}},"source":["clean_df = train_df['text'].apply(raw_to_words)"],"execution_count":73,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Jl9vETVWt6HL","executionInfo":{"status":"ok","timestamp":1622680901866,"user_tz":-480,"elapsed":7,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}},"outputId":"76163c4f-c1e7-40ad-9c69-725619db15e1"},"source":["clean_df.head()"],"execution_count":74,"outputs":[{"output_type":"execute_result","data":{"text/plain":["395                                                loved\n","121    great place eat reminds little mom pop shops s...\n","668                     like reviewer said pay eat place\n","26                                    great service food\n","408           please stay away shrimp stir fried noodles\n","Name: text, dtype: object"]},"metadata":{"tags":[]},"execution_count":74}]},{"cell_type":"markdown","metadata":{"id":"do8uX8i4J6Ir"},"source":["## Splitting train data and validation data"]},{"cell_type":"code","metadata":{"id":"kd0jpzVvrRPO","executionInfo":{"status":"ok","timestamp":1622680901866,"user_tz":-480,"elapsed":6,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}}},"source":["train_split = 0.9 # train data vs validation data\n","split_size = int(len(clean_df) * train_split)\n","train_data,train_y = clean_df[:split_size], train_df['label'][:split_size]\n","val_data, val_y = clean_df[split_size:], train_df['label'][split_size:]\n","tk = Tokenizer(num_words=5000,oov_token='<OOV>')"],"execution_count":75,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"yQ_N_NiBsu2u","executionInfo":{"status":"ok","timestamp":1622680901867,"user_tz":-480,"elapsed":6,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}},"outputId":"14982e0c-244b-4b2d-a573-efae4819d9f8"},"source":["tk.fit_on_texts(train_data)\n","word_index = tk.word_index\n","dict(list(word_index.items())[0:10])"],"execution_count":76,"outputs":[{"output_type":"execute_result","data":{"text/plain":["{'<OOV>': 1,\n"," 'back': 7,\n"," 'food': 2,\n"," 'go': 8,\n"," 'good': 4,\n"," 'great': 6,\n"," 'like': 9,\n"," 'place': 3,\n"," 'service': 5,\n"," 'time': 10}"]},"metadata":{"tags":[]},"execution_count":76}]},{"cell_type":"code","metadata":{"id":"9mA-oFwH7PQG","executionInfo":{"status":"ok","timestamp":1622680901867,"user_tz":-480,"elapsed":6,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}}},"source":["max_length = 30\n","train_seq = tk.texts_to_sequences(train_data)\n","train_pad = pad_sequences(train_seq,maxlen=max_length)\n","val_seq = tk.texts_to_sequences(val_data)\n","val_pad = pad_sequences(val_seq,maxlen=max_length)\n","test_seq = tk.texts_to_sequences(test_df['text'])\n","test_pad = pad_sequences(test_seq,maxlen=max_length)"],"execution_count":77,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"LLbjRRPPJcTU"},"source":["## Callbacks to save best model, and tune learning rate"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"NZjqf0tjANrO","executionInfo":{"status":"ok","timestamp":1622680901868,"user_tz":-480,"elapsed":6,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}},"outputId":"17cf65e2-43cc-424e-f577-f20a4fc7f5ae"},"source":["path_model = 'model/'\n","if not os.path.exists(path_model):\n","    os.mkdir(path_model)\n","now = time.strftime(\"%Y%m%d%H%M%S\", time.localtime())\n","callback_logger = CSVLogger(\n","        path_model + \"log_training_{}.csv\".format(now)\n","        , separator=','\n","        , append=False\n","    )\n","callack_saver = ModelCheckpoint(\n","        path_model\n","        + \"E[{epoch:02d}]\"\n","        + \".hdf5\"\n","        , monitor='val_accuracy'\n","        , verbose=0\n","        , mode='max'\n","        , period=5\n","        , save_best_only=True\n","    )\n","callback_reducer = ReduceLROnPlateau(\n","        monitor='val_accuracy'\n","        , factor=0.5\n","        , patience=5\n","        , min_lr=1e-6\n","        , min_delta=1e-3\n","    )\n","list_callback = [\n","        callback_logger\n","        , callack_saver\n","        , callback_reducer\n","    ]"],"execution_count":78,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"1jRPoErx4Xk5","executionInfo":{"status":"ok","timestamp":1622680927057,"user_tz":-480,"elapsed":25194,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}},"outputId":"26969d3a-e9f1-427b-f5be-eb908fce1558"},"source":["model = tf.keras.Sequential([\n","    tf.keras.layers.Embedding(5000, 2),\n","    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(2)),\n","    tf.keras.layers.Dense(2, activation='softmax')\n","])\n","model.summary()\n","model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n","history = model.fit(train_pad, train_y, epochs=100, validation_data=(val_pad, val_y), verbose=1,callbacks=list_callback)"],"execution_count":79,"outputs":[{"output_type":"stream","text":["Model: \"sequential_13\"\n","_________________________________________________________________\n","Layer (type)                 Output Shape              Param #   \n","=================================================================\n","embedding_13 (Embedding)     (None, None, 2)           10000     \n","_________________________________________________________________\n","bidirectional_9 (Bidirection (None, 4)                 80        \n","_________________________________________________________________\n","dense_14 (Dense)             (None, 2)                 10        \n","=================================================================\n","Total params: 10,090\n","Trainable params: 10,090\n","Non-trainable params: 0\n","_________________________________________________________________\n","Epoch 1/100\n","26/26 [==============================] - 4s 33ms/step - loss: 0.6927 - accuracy: 0.5272 - val_loss: 0.6914 - val_accuracy: 0.5667\n","Epoch 2/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.6897 - accuracy: 0.6160 - val_loss: 0.6903 - val_accuracy: 0.5222\n","Epoch 3/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.6857 - accuracy: 0.6333 - val_loss: 0.6882 - val_accuracy: 0.4889\n","Epoch 4/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.6793 - accuracy: 0.6852 - val_loss: 0.6832 - val_accuracy: 0.5667\n","Epoch 5/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.6691 - accuracy: 0.7568 - val_loss: 0.6768 - val_accuracy: 0.5667\n","Epoch 6/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.6523 - accuracy: 0.7568 - val_loss: 0.6665 - val_accuracy: 0.5556\n","Epoch 7/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.6316 - accuracy: 0.7210 - val_loss: 0.6615 - val_accuracy: 0.5556\n","Epoch 8/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.6153 - accuracy: 0.7667 - val_loss: 0.6532 - val_accuracy: 0.5444\n","Epoch 9/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.5969 - accuracy: 0.7407 - val_loss: 0.6444 - val_accuracy: 0.5444\n","Epoch 10/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.5764 - accuracy: 0.7790 - val_loss: 0.6304 - val_accuracy: 0.6111\n","Epoch 11/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.5546 - accuracy: 0.8309 - val_loss: 0.6246 - val_accuracy: 0.5778\n","Epoch 12/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.5323 - accuracy: 0.8605 - val_loss: 0.6095 - val_accuracy: 0.6222\n","Epoch 13/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.5090 - accuracy: 0.8704 - val_loss: 0.5915 - val_accuracy: 0.7222\n","Epoch 14/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.4862 - accuracy: 0.9111 - val_loss: 0.5931 - val_accuracy: 0.6111\n","Epoch 15/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.4638 - accuracy: 0.8889 - val_loss: 0.5771 - val_accuracy: 0.7111\n","Epoch 16/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.4413 - accuracy: 0.9123 - val_loss: 0.5673 - val_accuracy: 0.7333\n","Epoch 17/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.4204 - accuracy: 0.9185 - val_loss: 0.5519 - val_accuracy: 0.7222\n","Epoch 18/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.3969 - accuracy: 0.9444 - val_loss: 0.5863 - val_accuracy: 0.6111\n","Epoch 19/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.3883 - accuracy: 0.9160 - val_loss: 0.5418 - val_accuracy: 0.7333\n","Epoch 20/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.3626 - accuracy: 0.9432 - val_loss: 0.5254 - val_accuracy: 0.8111\n","Epoch 21/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.3455 - accuracy: 0.9457 - val_loss: 0.5172 - val_accuracy: 0.8000\n","Epoch 22/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.3287 - accuracy: 0.9494 - val_loss: 0.5089 - val_accuracy: 0.8000\n","Epoch 23/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.3197 - accuracy: 0.9580 - val_loss: 0.5052 - val_accuracy: 0.7889\n","Epoch 24/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.3056 - accuracy: 0.9580 - val_loss: 0.5097 - val_accuracy: 0.8000\n","Epoch 25/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2913 - accuracy: 0.9593 - val_loss: 0.5070 - val_accuracy: 0.8111\n","Epoch 26/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2829 - accuracy: 0.9630 - val_loss: 0.5114 - val_accuracy: 0.7778\n","Epoch 27/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2769 - accuracy: 0.9654 - val_loss: 0.5043 - val_accuracy: 0.8000\n","Epoch 28/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2731 - accuracy: 0.9642 - val_loss: 0.5273 - val_accuracy: 0.7222\n","Epoch 29/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2687 - accuracy: 0.9630 - val_loss: 0.5069 - val_accuracy: 0.7889\n","Epoch 30/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2612 - accuracy: 0.9691 - val_loss: 0.5245 - val_accuracy: 0.7333\n","Epoch 31/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2579 - accuracy: 0.9679 - val_loss: 0.5026 - val_accuracy: 0.8000\n","Epoch 32/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2544 - accuracy: 0.9704 - val_loss: 0.4974 - val_accuracy: 0.7778\n","Epoch 33/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2537 - accuracy: 0.9667 - val_loss: 0.5004 - val_accuracy: 0.7889\n","Epoch 34/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2500 - accuracy: 0.9704 - val_loss: 0.5004 - val_accuracy: 0.7889\n","Epoch 35/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2481 - accuracy: 0.9667 - val_loss: 0.5046 - val_accuracy: 0.7889\n","Epoch 36/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2461 - accuracy: 0.9716 - val_loss: 0.5000 - val_accuracy: 0.7889\n","Epoch 37/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2450 - accuracy: 0.9704 - val_loss: 0.5016 - val_accuracy: 0.7889\n","Epoch 38/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2440 - accuracy: 0.9704 - val_loss: 0.5081 - val_accuracy: 0.7778\n","Epoch 39/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2427 - accuracy: 0.9716 - val_loss: 0.4994 - val_accuracy: 0.7889\n","Epoch 40/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2418 - accuracy: 0.9704 - val_loss: 0.5020 - val_accuracy: 0.7889\n","Epoch 41/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2404 - accuracy: 0.9728 - val_loss: 0.5040 - val_accuracy: 0.8111\n","Epoch 42/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2400 - accuracy: 0.9691 - val_loss: 0.5055 - val_accuracy: 0.7889\n","Epoch 43/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2395 - accuracy: 0.9704 - val_loss: 0.5026 - val_accuracy: 0.8000\n","Epoch 44/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2390 - accuracy: 0.9716 - val_loss: 0.5039 - val_accuracy: 0.8111\n","Epoch 45/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2384 - accuracy: 0.9728 - val_loss: 0.5026 - val_accuracy: 0.7889\n","Epoch 46/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2379 - accuracy: 0.9728 - val_loss: 0.5027 - val_accuracy: 0.8000\n","Epoch 47/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2377 - accuracy: 0.9704 - val_loss: 0.5034 - val_accuracy: 0.8111\n","Epoch 48/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2378 - accuracy: 0.9741 - val_loss: 0.5010 - val_accuracy: 0.7889\n","Epoch 49/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2372 - accuracy: 0.9728 - val_loss: 0.5040 - val_accuracy: 0.8000\n","Epoch 50/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2369 - accuracy: 0.9728 - val_loss: 0.5024 - val_accuracy: 0.7889\n","Epoch 51/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2366 - accuracy: 0.9728 - val_loss: 0.5025 - val_accuracy: 0.7889\n","Epoch 52/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2366 - accuracy: 0.9728 - val_loss: 0.5030 - val_accuracy: 0.8000\n","Epoch 53/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2364 - accuracy: 0.9728 - val_loss: 0.5025 - val_accuracy: 0.7889\n","Epoch 54/100\n","26/26 [==============================] - 0s 9ms/step - loss: 0.2362 - accuracy: 0.9728 - val_loss: 0.5025 - val_accuracy: 0.7889\n","Epoch 55/100\n","26/26 [==============================] - 0s 9ms/step - loss: 0.2361 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 56/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2360 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 57/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2359 - accuracy: 0.9728 - val_loss: 0.5031 - val_accuracy: 0.8000\n","Epoch 58/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2359 - accuracy: 0.9728 - val_loss: 0.5032 - val_accuracy: 0.8111\n","Epoch 59/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2359 - accuracy: 0.9728 - val_loss: 0.5034 - val_accuracy: 0.8111\n","Epoch 60/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2357 - accuracy: 0.9728 - val_loss: 0.5030 - val_accuracy: 0.8000\n","Epoch 61/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2357 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 62/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2357 - accuracy: 0.9728 - val_loss: 0.5031 - val_accuracy: 0.8000\n","Epoch 63/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2356 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 64/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2356 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 65/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2356 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 66/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2356 - accuracy: 0.9728 - val_loss: 0.5027 - val_accuracy: 0.7889\n","Epoch 67/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2355 - accuracy: 0.9728 - val_loss: 0.5027 - val_accuracy: 0.7889\n","Epoch 68/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2355 - accuracy: 0.9728 - val_loss: 0.5027 - val_accuracy: 0.7889\n","Epoch 69/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2355 - accuracy: 0.9728 - val_loss: 0.5027 - val_accuracy: 0.7889\n","Epoch 70/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2355 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 71/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2355 - accuracy: 0.9728 - val_loss: 0.5027 - val_accuracy: 0.7889\n","Epoch 72/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2355 - accuracy: 0.9728 - val_loss: 0.5027 - val_accuracy: 0.7889\n","Epoch 73/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2354 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 74/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2354 - accuracy: 0.9728 - val_loss: 0.5027 - val_accuracy: 0.7889\n","Epoch 75/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2354 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 76/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2354 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 77/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2354 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 78/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2354 - accuracy: 0.9728 - val_loss: 0.5027 - val_accuracy: 0.7889\n","Epoch 79/100\n","26/26 [==============================] - 0s 12ms/step - loss: 0.2353 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 80/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2353 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 81/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2353 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 82/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2353 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 83/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2353 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 84/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2353 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 85/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2352 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 86/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2352 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 87/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2352 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 88/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2352 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 89/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2352 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 90/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2352 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 91/100\n","26/26 [==============================] - 0s 9ms/step - loss: 0.2351 - accuracy: 0.9728 - val_loss: 0.5029 - val_accuracy: 0.7889\n","Epoch 92/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2351 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 93/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2351 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 94/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2351 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 95/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2351 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 96/100\n","26/26 [==============================] - 0s 7ms/step - loss: 0.2351 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 97/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2350 - accuracy: 0.9728 - val_loss: 0.5027 - val_accuracy: 0.7889\n","Epoch 98/100\n","26/26 [==============================] - 0s 9ms/step - loss: 0.2350 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 99/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2350 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n","Epoch 100/100\n","26/26 [==============================] - 0s 8ms/step - loss: 0.2350 - accuracy: 0.9728 - val_loss: 0.5028 - val_accuracy: 0.7889\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"P_PvNCh8LHFN","executionInfo":{"status":"ok","timestamp":1622680927057,"user_tz":-480,"elapsed":4,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}}},"source":["def plot_lstm(history,metrics):\n","    plt.plot(history.history[metrics])\n","    plt.plot(history.history['val_'+metrics])\n","    plt.legend([metrics,'val_'+metrics])\n","    plt.xlabel('epochs')\n","    plt.ylabel(metrics)\n","    plt.savefig(metrics+'.png')\n","    plt.show()"],"execution_count":80,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":279},"id":"khQsDfw9L_Im","executionInfo":{"status":"ok","timestamp":1622680927057,"user_tz":-480,"elapsed":3,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}},"outputId":"2544908e-0e83-4475-b49d-5acea4eefcf8"},"source":["plot_lstm(history,'accuracy')"],"execution_count":81,"outputs":[{"output_type":"display_data","data":{"image/png":"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sGHDKCgo6NHrgioQZIWOY75U2xt2Ylr7A8pzYdSc9vtDQuDIH7RsVxbBgwvhpavg8ndapo4ozYHwmJ51N1VqENAg0H8czmcRPI3FwI4mJ3efv7XjAyryIW5k9yeKHQan3we5G2Ht3S37y7JtbUD/UyilBpCgqhFsrBtlfynYClO+1frJukqoK4f4DlJDHZl2KmR8D97/g73xh0XBgS9g6MS+LbRSSrksqALB11URlIYNJ6GjGkFz11EfagQeJ/8vHPgc3vu/ln1zlveukEqpfquhoYGwsMF32xx8V9QJYwxFlXUUD53YcSCoyLOPvtYIAKIT4eqPW88sGh7Vu4IqNYD96pXNbDlQ1qfnnDF6CHecPrPb48466yz2799PTU0N119/PVdeeSVvvPEGt956K42NjQwfPpy3336biooKrr32WjIzMxER7rjjDr773e8SFxdHRYWdXmbFihWsWrWKJ554gksuuYSoqCi++OILFi1axPnnn8/1119PTU0N0dHRPP7440ydOpXGxkZ+/vOf88YbbxASEsIVV1zBzJkzuf/++3nppZcAeOutt3jwwQdZuXJln/6NeitoAkFlXSO1DU2UJ6TDwRehqan1xHBtB5P5KiQEQvTmr1SgPfbYYwwdOpTq6mqOOuoozjzzTK644grWrl3LhAkTKC4uBuDXv/41CQkJbNy4EYCSkpJuz52dnc1HH31EaGgoZWVlvP/++4SFhbF69WpuvfVWXnjhBR555BH27t3Lhg0bCAsLo7i4mKSkJH784x9TUFBAcnIyjz/+OD/84Q9d/TscjqAJBEUVtQDUD50K+6vh0N7W+XxPjaAnqSGlVCu+fHN3y/3339/8TXv//v088sgjLF68uLk//dChQwFYvXo1zz33XPPrkpK67+W3bNkyQkNDASgtLeXiiy9m586diAj19fXN573qqquaU0ee97vooot4+umnufTSS/n444956qmn+uiK+07wBIJKJ33jWRsgf2v7QBASDjFD/V84pVSvvPvuu6xevZqPP/6YmJgYTjjhBI444gi2bdvm8zm8u122HSUdGxvb/Pt///d/c+KJJ7Jy5Ur27t3LCSec0OV5L730Uk4//XSioqJYtmxZv2xjCJruo0UVNhBEjXK+sbRtJyh3BpNp10+lBpzS0lKSkpKIiYlh27ZtfPLJJ9TU1LB27VqysrIAmlND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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":279},"id":"9kedla5zMiS0","executionInfo":{"status":"ok","timestamp":1622680927716,"user_tz":-480,"elapsed":662,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}},"outputId":"e14b0aee-5446-4e5a-fe47-bd061bc17ed1"},"source":["plot_lstm(history,'loss')"],"execution_count":82,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"rvYIyjjPE2Qu","executionInfo":{"status":"ok","timestamp":1622680962644,"user_tz":-480,"elapsed":11673,"user":{"displayName":"caigui lin","photoUrl":"","userId":"11108068060067518072"}}},"source":["best_model = load_model('./model/E[20].hdf5')\n","predict = best_model.predict(test_pad)\n","result = pd.DataFrame(np.argmax(predict, axis=1),columns=['classification'])\n","result.to_csv('F000H460_LSTM_predictions.csv')"],"execution_count":84,"outputs":[]}]}